#ifndef _LCD_LCD_H
#define _LCD_LCD_H		

#include "stm32f1xx_hal.h"

// ���Ͷ��屣�ֲ���
typedef uint8_t  u8;
typedef uint16_t u16;
typedef uint32_t u32;

#define USE_HORIZONTAL 1  // ��Ļ��������

// ��Ļ�ߴ綨�屣�ֲ���
#if USE_HORIZONTAL==0||USE_HORIZONTAL==1
#define LCD_W 128
#define LCD_H 160
#else
#define LCD_W 160
#define LCD_H 128
#endif

// ����SPI�������������CubeMX���õ�һ�£�
extern SPI_HandleTypeDef hspi2;

// LCD�������ź궨�壨�����ʵ��Ӳ�������޸ģ�
#define LCD_CS_PORT    GPIOA
#define LCD_CS_PIN     GPIO_PIN_5
#define LCD_DC_PORT    GPIOA
#define LCD_DC_PIN     GPIO_PIN_12
#define LCD_RES_PORT   GPIOB
#define LCD_RES_PIN    GPIO_PIN_12
#define LCD_BL_PORT    GPIOA
#define LCD_BL_PIN     GPIO_PIN_4

// �������Ų�����
#define LCD_CS_CMD(x)  HAL_GPIO_WritePin(LCD_CS_PORT, LCD_CS_PIN, x ? GPIO_PIN_SET : GPIO_PIN_RESET)
#define LCD_DC_CMD(x)  HAL_GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, x ? GPIO_PIN_SET : GPIO_PIN_RESET)
#define LCD_RES_CMD(x) HAL_GPIO_WritePin(LCD_RES_PORT, LCD_RES_PIN, x ? GPIO_PIN_SET : GPIO_PIN_RESET)
#define LCD_BL_CMD(x)  HAL_GPIO_WritePin(LCD_BL_PORT, LCD_BL_PIN, x ? GPIO_PIN_SET : GPIO_PIN_RESET)

// �����������ֲ���
void LCD_Writ_Bus(u8 dat);
void LCD_WR_DATA8(u8 dat);
void LCD_WR_DATA(u16 dat);
void LCD_WR_REG(u8 dat);
void LCD_Address_Set(u16 x1,u16 y1,u16 x2,u16 y2);
void LCD_Init(void);
void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);
void LCD_DrawPoint(u16 x,u16 y,u16 color);
void LCD_DrawLine(u16 x1,u16 y1,u16 x2,u16 y2,u16 color);
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);
void Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);
// void LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);
// void LCD_ShowChinese12x12(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);
// void LCD_ShowChinese16x16(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);
// void LCD_ShowChinese24x24(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);
// void LCD_ShowChinese32x32(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode);
void LCD_ShowChar(u16 x,u16 y,u8 num,u16 fc,u16 bc,u8 sizey,u8 mode);
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode);
void LCD_ShowPicture(u16 x,u16 y,u16 length,u16 width,const u8 pic[]);

void LCD_SHOW_PIC(void);

//������ɫ
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000	  
#define BLUE           	 0x001F  
#define BRED             0XF81F
#define GRED 			 0XFFE0
#define GBLUE			 0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			 0XBC40 //��ɫ
#define BRRED 			 0XFC07 //�غ�ɫ
#define GRAY  			 0X8430 //��ɫ
#define DARKBLUE      	 0X01CF	//����ɫ
#define LIGHTBLUE      	 0X7D7C	//ǳ��ɫ  
#define GRAYBLUE       	 0X5458 //����ɫ
#define LIGHTGREEN     	 0X841F //ǳ��ɫ
#define LGRAY 			 0XC618 //ǳ��ɫ(PANNEL),���屳��ɫ
#define LGRAYBLUE        0XA651 //ǳ����ɫ(�м����ɫ)
#define LBBLUE           0X2B12 //ǳ����ɫ(ѡ����Ŀ�ķ�ɫ)

#endif
